## Задача 1

разработать итератор, который бы перебирал указанные (заданные) столбцы двумерного списка. Список представляет собой двумерную таблицу из данных:

```python

lst = [
       [11, 12, 13],
       [21, 22, 23],
       [31, 32, 33]
      ]
```

Для этого в программе необходимо объявить класс с именем `IterColumn`, объекты которого создаются командой:

```
it = IterColumn(lst, column)
```

где `lst` - ссылка на двумерный список; column - индекс перебираемого столбца (отсчитывается от 0).

Затем, с объектами класса `IterColumn` должны быть доступны следующие операции:

```python
it = IterColumn(lst, 1)
for x in it:  # последовательный перебор всех элементов столбца списка: x12, x22, ..., xM2
    print(x)

it_iter = iter(it)
x = next(it_iter)
```

## Задача 2 **

необходимо реализовать таблицу TableValues по следующей схеме:

![](img/table_2.png)

Каждая ячейка таблицы должна быть представлена классом `Cell`. Объекты этого класса создаются командой:

> cell = Cell(data)

где `data` - данные в ячейке.

В каждом объекте класса `Cell` должен формироваться локальный приватный атрибут `__data` с соответствующим значением.

Для работы с ним в классе `Cell` должно быть объект-свойство (`property`):

`data` - для записи и считывания информации из атрибута `__data`.

Сам класс `TableValues` представляет таблицу в целом, объекты которого создаются командой:

`table = TableValues(rows, cols, type_data)`

где

`rows, cols` - число строк и столбцов таблицы;

`type_data` - тип данных ячейки (int - по умолчанию, float, list, str и т.п.).

Начальные значения в ячейках таблицы равны 0 (целое число).

С объектами класса `TableValues` должны выполняться следующие команды:

```python
table[row, col] = value
# запись нового значения в ячейку с индексами row, col (индексы отсчитываются с нуля)

value = table[row, col]
# считывание значения из ячейки с индексами row, col

for row in table:  # перебор по строкам
    for value in row: # перебор по столбцам
        print(value, end=' ')
        # вывод значений ячеек в консоль
    print()
```

При попытке записать по индексам `table[row, col]` данные другого типа (не совпадающего с атрибутом type_data объекта класса TableValues), должно генерироваться исключение командой:

```python
raise TypeError('неверный тип присваиваемых данных')
```

При работе с индексами row, col, необходимо проверять их корректность. Если индексы не целое число или они выходят за диапазон размера таблицы, то генерировать исключение командой:

```python
raise IndexError('неверный индекс')
```
